package geeks.web;

import geeks.modelo.Idea;
import java.io.File;
import java.io.IOException;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.context.request.WebRequest;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.servlet.ModelAndView;

@Controller
public class SubirArchivoController {

	@RequestMapping(value = "/cargar", method = RequestMethod.POST)
	protected ModelAndView cargar(HttpServletRequest request,
			HttpServletResponse response) throws Exception {

		Idea obj = new Idea();
				
		try {
			
			obj.setTitulo(request.getParameter("txtTitulo"));
			obj.setDescripcion(request.getParameter("txtDescripcion"));
			obj.setPalabraClave1(request.getParameter("txtClave1"));
			obj.setPalabraClave2(request.getParameter("txtClave2"));
			obj.setPalabraClave3(request.getParameter("txtClave3"));
			obj.setPalabraClave4(request.getParameter("txtClave4"));
			obj.setArchivo(request.getParameter("txtArchivo"));

			int accion = (request.getParameter("v").toString() == null) ? 0 : (Integer.parseInt(request.getParameter("v")));

			switch (accion) {
			case 1:
				request.setAttribute("ACCION", 1);
				break;
			case 2:
				obj.setCodigo(Integer.parseInt(request.getParameter("txtCodigo")));
				request.setAttribute("ACCION", 2);
				break;
			}
			
			return new ModelAndView("cargarArchivo", "IDEA", obj);
			
		} catch (Exception e) {
			return new ModelAndView("cargarArchivo", "IDEA", obj);
		}
	}

	@RequestMapping(value = "/subirArchivo", method = RequestMethod.POST)
	protected ModelAndView subirArchivo(
			@RequestParam("archivo") MultipartFile file, WebRequest webRequest,
			Model model) throws Exception {
		
		int accion = 0;
		Idea objIdea = new Idea();
		
		accion = Integer.parseInt((webRequest.getParameter("txtAccion")));
		objIdea.setTitulo(webRequest.getParameter("txtTitulo"));
		objIdea.setDescripcion(webRequest.getParameter("txtDescripcion"));
		objIdea.setPalabraClave1(webRequest.getParameter("txtClave1"));
		objIdea.setPalabraClave2(webRequest.getParameter("txtClave2"));
		objIdea.setPalabraClave3(webRequest.getParameter("txtClave3"));
		objIdea.setPalabraClave4(webRequest.getParameter("txtClave4"));
		objIdea.setArchivo(webRequest.getParameter("txtArchivo"));

		String orgFileName = file.getOriginalFilename();

		String filePath = "d:/" + orgFileName;
		ModelMap modelMap = new ModelMap();

		File dest = new File(filePath);

		try {
						
			file.transferTo(dest);
			
		} catch (IllegalStateException e) {			
			modelMap.addAttribute("ERROR", "No se pudo subir el archivo: " + orgFileName);
			return new ModelAndView("cargarArchivo", modelMap);
			// return "File uploaded failed:" + orgFileName;
		} catch (IOException e) {
			modelMap.addAttribute("ERROR", "No se pudo subir el archivo: " + orgFileName);
			return new ModelAndView("cargarArchivo", modelMap);
		} catch (Exception e) {
			modelMap.addAttribute("ERROR", e.getMessage());
			return new ModelAndView("cargarArchivo", modelMap);
		}

		String archivo[] = {orgFileName, filePath};
		
		modelMap.addAttribute("ACCION", accion);
		modelMap.addAttribute("ARCHIVO", archivo);
		modelMap.addAttribute("CARGA", "Archivo cargado correctamente.");
				
		switch (accion) {
		case 1:
			modelMap.addAttribute("IDEA", objIdea);
			return new ModelAndView("registroIdea", modelMap);
		case 2:
			objIdea.setCodigo(Integer.parseInt(webRequest.getParameter("txtCodigo")));
			modelMap.addAttribute("IDEA", objIdea);
			return new ModelAndView("actualizarIdea", modelMap);
		default:
			modelMap.addAttribute("IDEA", objIdea);
			return new ModelAndView("cargarArchivo", modelMap);
		}		
	}
}
